草庐IT

c - WaitForMultipleObjects 堆栈

全部标签

c++ - C++ 隐含了这个,以及它是如何被压入堆栈的

我需要知道,当调用C++中的类方法时,隐式“this”指针是第一个参数还是最后一个参数。即:它是先入栈还是最后入栈。换句话说,我是在询问一个被调用的类方法是否被编译器认为是:intfoo::bar(foo*constthis,intarg1,intarg2);//or:intfoo::bar(intarg1,intarg2,foo*constthis);因此,通过扩展,更重要的是,这也将回答G++是将this指针分别压入最后还是最先。我查询了谷歌,但没有找到太多。另外,当调用C++函数时,它们是否与C函数执行相同的操作?即:pushebpmovebp,esp总而言之:被调用的类方法看起

c++ - 将堆栈分配的对象作为指针参数发送给其他函数好吗?

将堆栈分配的对象作为指针参数发送给其他函数好吗? 最佳答案 是的,但是对于这种情况更常见的C++习惯用法是使用引用(可能是constrreference)而不是指针。所以不是voidfoo(sometype*p){p->func();}你写:voidfoo(sometype&p){p.func();}这样做的好处是您不需要在调用者中取消引用对象:voidafunc(){sometypet;foo(t);}并且还给读者一个潜意识的暗示,即您不打算让函数取得对象的所有权。 关于c++-将堆栈

c++ - 堆栈弹出操作能否在 C++11 中安全地返回值

因此,在C++11中似乎不再需要对堆栈中的.top和.pop进行如此严格的隔离。也许我遗漏了一些东西,但C++03和之前的问题是如果.pop返回一个值,则复制操作可能会在元素复制期间抛出异常。示例(取自here的代码示例):template//TmusthavedefaultctorandcopyassignmentclassStack{public:Stack();~Stack();Stack(constStack&);Stack&operator=(constStack&);unsignedCount();//returns#ofT'sinthestackvoidPush(cons

c++ - 简单的 USB 主机堆栈

我正在尝试使用Atmel处理器上的USB主机端口连接到单个USB设备。我有一个内存有限且没有操作系统的嵌入式系统。我想实现一个简单的专用主机来连接单个USB从属设备。谁能指导我实现简单的USB主机?处理器是AtmelAT91SAM9261S。 最佳答案 首先,如果我没记错的话,AT91SAM9261S有OHCIusbcontroller在船上,您至少需要实现简单的主机Controller驱动程序(您可以查看Linux实现)。根据您的设备将使用的传输类型,它可能不是很难-很难:)没有简单的方法来实现USB堆栈。实现Controller

c++ - 在 C++ 中处理堆栈损坏的工具

编辑:由于对我的示例的评论是正确的,我将其删除并将其变成一个通用问题:在我的项目中,有时我会遇到堆栈损坏的情况。无论我多么努力地编写代码来避免它,有时它就是不可避免的。但是当它发生时,有什么方法可以对抗它?我在这个博客里找到了好心人给的一个宏:http://rxwen.blogspot.com/2009/04/detect-stack-corruption.html它读取ebp寄存器值以检测损坏。但肯定会有更复杂的工具来帮助避免搬起石头砸自己的脚。我在Windows中使用Codeblocks和gcc编译器进行编程。我提出这个问题的原因是找到我可以在我的编程环境下使用的工具来帮助我检测这

c++ - 如何实现仅在堆栈上分配的字符串

在大约十年前的一个项目中,我们发现std::vector的动态分配导致严重的性能消耗。在这种情况下,它分配了许多小vector,所以快速的解决方案是编写一个类似vector的类来包装一个基于堆栈的预分配char用作其容量的原始存储的数组。结果是static_vector.如果你知道一些基础知识,这样的东西很容易写,你可以找到quiteafew这样的野兽ontheweb.事实上,boosthasone,现在也是。现在在嵌入式平台上工作,我们恰好需要一个static_basic_string.那将是一个字符串,它在堆栈上预先分配了固定的最大内存量并将其用作其容量。起初我认为这应该相当容易(

c++ - 有关堆栈大小的警告消息

我使用VisualStudio2010并激活了代码分析。在我的代码中有一行在函数中分配一些内存:TCHARsomeString[40000];代码分析抛出警告信息:warningC6262:Functionuses'40000'bytesofstack:exceeds/analyze:stacksize'16384'.Considermovingsomedatatoheap我想知道我是否应该认真对待这个警告。如果我在堆栈上分配一些内存>16384,我是否必须面对一些真正的麻烦?或者它只是一条一般性的警告信息,提醒我必须注意我的筹码量?据我所知,默认堆栈大小为1MB(如果您使用Visua

c++ - 导致堆栈溢出的正则表达式

关于我之前的问题:ECMAScriptRegexforamultilinedstring,我已经实现了以下加载过程:voidLoad(conststd::string&szFileName){staticconststd::regexregexObject("===([^=]+)===\\n((?:.|\\n)*)\\n===END\\1===",std::regex_constants::ECMAScript|std::regex_constants::optimize);staticconststd::regexregexData("]+)>:([^(inFile)),(std::

c++ - 使没有成员的仿函数成为类成员对象或堆栈对象是否更有效?

我有一个没有成员变量的仿函数。我想知道根据需要动态创建此仿函数或将其缓存为成员变量是否更有效。我不确定关于空基类优化和缓存位置的问题。structFoo{intoperator()(constMyData&data)const{...}}; 最佳答案 对于空对象,直接在栈中创建即可。将仿函数作为成员添加到您的类型中将使您的所有对象都变大。将它添加为基础(以利用空基础优化),将产生一个奇怪的设计,其中您的类型无缘无故地实现了operator()(constMyData&)。即使您将其设为私有(private),运营商也会在那里。由于该

c++ - 堆栈分配功能(性能)

在我的小性能问题调查中,我注意到一个有趣的堆栈分配功能,这里是测量时间的模板:#include#includeusingnamespacestd;usingnamespacestd::chrono;intx;//forsimpleoptimizationsuppressionvoidfoo();intmain(){constsize_tn=10000000;//tenmillionsautostart=high_resolution_clock::now();for(size_ti=0;i(finish-start).count()现在是关于foo()的实现,在每个实现中将总共分配50